В языке Ruby переход за пределы «счастливого пути» означает переход от линейной логики к оборонительной позиции, где сбои рассматриваются как объекты первого класса а не как фатальные аварии программы.
1. Иерархия исключений
Язык Ruby заранее определяет чёткую иерархию исключений, показанную на рисунке 8.1. Каждая ошибка является экземпляром класса в этой иерархии, начиная с корневого класса Exception корень. Понимание этой иерархии крайне важно: ошибки приложений обычно наследуются от StandardError, в то время как системные сбои (например, NoMemoryError) напрямую наследуются от Exception.
2. Ошибки как объекты данных
В отличие от низкоуровневых языков, где ошибка может быть простым кодом возврата, в Ruby упаковывает контекст—включая строку сообщения и трассировку выполнения—в формальный объект. Это позволяет разработчикам рассматривать прерывания во время выполнения как данные, которые можно анализировать и управлять ими через наследование.